草庐IT

java outOfMemoryError 与 stringbuilder

全部标签

c# - 用于字符串连接的 StringBuilder 抛出 OutOfMemoryException

我们大多倾向于遵循上述最佳实践。看看StringvsStringBuilder但StringBuilder可能会抛出OutOfMemoryException,即使有足够的可用内存也是如此。它抛出OOM异常,因为它需要“连续的内存块”。一些引用链接StringBuilderOutOfMemoryException还有很多......你们中有多少人遇到过这个问题或意识到了这个问题,你们做了什么来解决这个问题?有什么我遗漏的吗?P.S:我不知道这一点。我已经改写了这个问题。***同样的事情也适用于手动连接(我会验证这一点并更新SO)。另一件让我担心的事情是系统中有足够的内存。这就是我在这里提

c# - 将 StringBuilder 流式传输到文件

我需要创建一个大型文本文档。我目前使用StringBuilder制作文档,然后调用File.WriteallText(filename,sb.ToString)。不幸的是,这现在开始抛出内存异常。是否有更好的方法将StringBuilder流式传输到文件,或者是否有其他我应该使用的技术? 最佳答案 不要使用StringBuilder,请尝试使用TextWriter(它具有大致相似的API,但可以写入许多底层目标,包括文件)-即using(TextWriterwriter=File.CreateText(path)){//loopet

java - 澄清 StringBuilder 引用和方法执行顺序

这段代码StringBuilderb1=newStringBuilder("hello");b1.append(b1.append("!"));System.out.println("b1="+b1);将打印b1=hello!hello!因为内部的append先被执行并修改了对象b1;然后对外部b1求值(现在它等于hello!)并将相同的字符串附加到它。所以执行内部表达式原始对象被修改外部表达式在修改后的对象上执行但是现在,为什么这段代码会抛出NullPointerException?StringBuilders1=null;StringBuilders2=newStringBuild

java - 如何在 Java 中使用 String 或 StringBuilder 倒序搜索?

你能告诉我如何在Java中反向搜索(向后搜索)吗?我需要做同样的事情来在HTML文件中搜索文本。 最佳答案 [...]howtosearchinreveresorder(backwardsearch)injava?我假设您的意思是从末尾开始搜索字符串。对于此任务,您可以使用String.lastIndexOf(str).这将找到子字符串str的last索引。如果您想从该点继续搜索,可以添加第二个fromIndex参数。StringBuilder存在完全相同的方法 关于java-如何在Ja

java - 在 Java 中处理大字符串时出现 StringBuilder 内存不足错误

我从Stringtest+=str;开始,其中test以指数级增长,包含成千上万个字符。运行需要45分钟,可能是因为创建了大字符串并删除了垃圾。然后我像这样错开输入,将其带到30秒。这似乎是一种廉价的方法,但效果很好:if(secondDump.length()>50){intermedDump=intermedDump+secondDump;secondDump="";}if(intermedDump.length()>100){thirdDump=thirdDump+intermedDump;intermedDump="";}if(thirdDump.length()>500){f

Java String.replace() 或 StringBuilder.replace()

在我使用5-10个替换的情况下是否有必要使用stringbuilder。StringsomeData="......";someData=someData.replaceAll("(?s).*?","");someData=someData.replaceAll("(?s).*?","");someData=someData.replaceAll("(?s).*?","");someData=someData.replaceAll("(?s).*?","");someData=someData.replaceAll("(?s).*?","");someData=someData.rep

java - 对于最多 9-10 步的字符串连接,是否有比 StringBuilder 更快的方法?

我有这段代码来连接一些数组元素:StringBuildersb=newStringBuilder();privateRatedMessagejoinMessage(intstep,booleanisresult){sb.delete(0,sb.length());RatedMessagerm;for(inti=0;i重要的是数组最多包含10个项目,所以它不是很多。我的跟踪输出告诉我这个方法被调用了18864次,16%的运行时间花在了这个方法上。我可以优化更多吗? 最佳答案 首先,我不会重用StringBuilder并始终创建新实例。

java - 为什么 StringBuffer 有 toStringCache 而 StringBuilder 没有?

在JDK8中,StringBuffer类有一个toStringCache,而StringBuilder没有。/***AcacheofthelastvaluereturnedbytoString.Cleared*whenevertheStringBufferismodified.*/privatetransientchar[]toStringCache;但是为什么呢?我能想到的一个可能原因是StringBuffer已经同步,因此可以更轻松地实现缓存。或者也许历史上StringBuffer是这样实现的,所以旧代码严重依赖这个特性?鉴于现代JVM具有逃逸分析和偏向锁定,这些差异是否相关?

java - 在没有 toString() 的情况下将 StringBuilder 写入 Writer

在Servlet中,我在StringBuilder中构建了大量HTML内容,最后需要将其写入响应的PrintWriter。为了使用PrintWriter,它必须首先调用StringBuilder的toString()方法以获取字符串形式的内容。但这不必要地重复了内容。有没有什么方法可以直接从StringBuilder写入,因为它已经保存了内容?PrintWriter可以接受CharSequence,但文档说明它调用CharSequence的toString(),所以它并没有真正帮助。我能看到的唯一清晰的方法是使用StringBuilder的charAt(i)方法一次获取和写入一个字符,

java - 为什么 StringBuilder 不打印?

为什么StringBuilder在一小段代码中不打印它应该打印的内容publicfinalclassTest1{publicvoidtest(){System.out.println(setFin().toString());}protectedStringBuildersetFin(){StringBuilderbuilder=newStringBuilder();try{builder.append("John");returnbuilder.append("Ibrahim");}finally{System.out.println("Infinaly");//builder.ap